<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Chapter 7. Effects</title>
    <link rel="stylesheet" href="style.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Clutter编程" />
    <link rel="up" href="index.html" title="Clutter编程" />
    <link rel="prev" href="score-example.html" title="示例" />
    <link rel="next" href="effects-example.html" title="示例" />
  </head>
  <body>
    <div class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Chapter 7. Effects</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="score-example.html"><img src="../icons/prev.png" alt="Prev" /></a> </td>
          <th width="60%" align="center"> </th>
          <td width="20%" align="right"> <a accesskey="n" href="effects-example.html"><img src="../icons/next.png" alt="Next" /></a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="chapter" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title"><a id="sec-effects"></a>Chapter 7. Effects</h2>
          </div>
        </div>
      </div>
      <div class="toc">
        <p>
          <b>Table of Contents</b>
        </p>
        <ul>
          <li>
            <span class="sect1">
              <a href="sec-effects.html#id3011880">使用 Effects</a>
            </span>
          </li>
          <li>
            <span class="sect1">
              <a href="effects-example.html">示例</a>
            </span>
          </li>
        </ul>
      </div>
      <div class="sect1" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title" style="clear: both"><a id="id3011880"></a>使用 Effects</h2>
            </div>
          </div>
        </div>
        <p>

<span class="application">Clutter</span> 提供了几个 effects 函数，它们可以与时间线一起使用，利用一些简单的数学计算，随时间改变某个 actor 的属性。在很多场合下，这是实现动画的好方法。 
例如，函数<code class="function">clutter_effect_fade()</code> 渐渐改变 actor 的透明度；函数 <code class="function">clutter_effect_rotate()</code> 渐渐旋转 actor，通过调用 <code class="literal">alpha</code> 回调函数计算透明度和旋转角度。
</p>
        <p>
要使用 effect，首先要创建一个 <code class="classname">ClutterEffectTemplate</code>，指定时间线对象和 <code class="classname">ClutterAlphaFunc</code> 回调。在回调中，需要调用<code class="function">clutter_alpha_get_timeline()</code>、<code class="function">clutter_timeline_get_current_frame()</code>和<code class="function">clutter_timeline_get_n_frames()</code>返回一个基于时间线当前帧数和总帧数的值，结果在 0 和 CLUTTER_ALPHA_MAX 之间，结构依赖于使用的 effect。例如，在使用 <code class="function">clutter_effect_fade()</code> 时，CLUTTER_ALPHA_MAX 表示 100% 不透明。<span class="application">Clutter</span> 提供了几个内建的回调，比如 <code class="function">CLUTTER_ALPHA_SINE</code>，利用它们可以很容易的指定一些常用的移动轨迹 
</p>
        <div class="figure">
          <a id="figure-alpha-func"></a>
          <p class="title">
            <b>Figure 7.1. 一些 alpha 函数的图形表示</b>
          </p>
          <div class="figure-contents">
            <div class="screenshot">
              <div>
                <img src="./figures/alpha-func.png" alt="一些 alpha 函数的图形表示" />
              </div>
            </div>
          </div>
        </div>
        <br class="figure-break" />
        <p>
定义了 <code class="classname">ClutterEffectTemplate</code> 后，你需要将它与 actor 的其它参数一起传给 <code class="function">clutter_effect</code> 函数。注意，在传给 effect 函数后要 unref effect 模板，effect 模板不是 "floating references"。
</p>
        <p>
为了实现在不同的时间线使用不同的 effect，可使用 <code class="function">clutter_effect_template_set_timeline_clone()</code> 函数复制时间线，然后修改该时间线的参数，实现其它的 effect。
</p>
        <p>实际上，effect API 是对 <code class="classname">ClutterBehaviour</code> 对象的封装，但 effect 函数一次只能控制一个 actor，而且在时间线运行时不能改变 effect。若需要这些，可直接使用 behaviour 对象，<a class="link" href="sec-behaviours.html" title="Chapter 8. Behaviours">Behaviours</a> 章节有详细描述。
</p>
        <p>
          <a class="ulink" href="http://clutter-project.org/docs/clutter/0.8/clutter-Clutter-Effects.html" target="_top">Reference</a>
        </p>
      </div>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="score-example.html"><img src="../icons/prev.png" alt="Prev" /></a> </td>
          <td width="20%" align="center"> </td>
          <td width="40%" align="right"> <a accesskey="n" href="effects-example.html"><img src="../icons/next.png" alt="Next" /></a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">示例 </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">
              <img src="../icons/home.png" alt="Home" />
            </a>
          </td>
          <td width="40%" align="right" valign="top"> 示例</td>
        </tr>
      </table>
    </div>
  </body>
</html>
